package cn.stylefeng.guns.sys.modular.system.service;

import cn.stylefeng.guns.base.pojo.page.LayuiPageInfo;
import cn.stylefeng.guns.sys.modular.system.entity.Dept;
import cn.stylefeng.guns.sys.modular.system.entity.DingdingDayAttend;
import cn.stylefeng.guns.sys.modular.system.model.params.*;
import cn.stylefeng.guns.sys.modular.system.model.result.DingdingDayAttendResult;
import cn.stylefeng.guns.sys.modular.system.model.result.DingdingEmpResult;
import cn.stylefeng.guns.sys.modular.system.model.result.DingdingEmpSimpleResult;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.http.ResponseEntity;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 钉钉，前三十天，人员出勤数据 服务类
 * </p>
 *
 * @author zxd
 * @since 2022-03-08
 */
public interface DingdingDayAttendService extends IService<DingdingDayAttend> {

    /**
     * 新增
     *
     * @author zxd
     * @Date 2022-03-08
     */
    void add(DingdingDayAttendParam param);

    /**
     * 删除
     *
     * @author zxd
     * @Date 2022-03-08
     */
    void delete(DingdingDayAttendParam param);

    /**
     * 更新
     *
     * @author zxd
     * @Date 2022-03-08
     */
    void update(DingdingDayAttendParam param);

    /**
     * 查询单条数据，Specification模式
     *
     * @author zxd
     * @Date 2022-03-08
     */
    DingdingDayAttendResult findBySpec(DingdingDayAttendParam param);

    /**
     * 查询列表，Specification模式
     *
     * @author zxd
     * @Date 2022-03-08
     */
    List<DingdingDayAttendResult> findListBySpec(DingdingDayAttendParam param);

    /**
     * 查询分页数据，Specification模式
     *
     * @author zxd
     * @Date 2022-03-08
     */
     LayuiPageInfo findPageBySpec(DingdingDayAttendParam param);

    /**
     * 获取钉钉人员，部门，打卡，关联关系表
     *
     * @author wjk
     * @Date 2022-03-11
     */
    LayuiPageInfo empAndDeptAndDingdingAttendList(EmpAndDeptAndDingdingAttendParam empAndDeptAndDingdingAttendParam);

    /**
     *  导出excel表格
     *  获取钉钉人员，部门，打卡，关联关系表
     * @author wjk
     * @Date 2021-03-21
     */
    ResponseEntity<byte[]> exportEmpAndDeptAndDingdingAttendList(HttpServletRequest request, HttpServletResponse response, EmpAndDeptAndDingdingAttendParam empAndDeptAndDingdingAttendParam);

    /**
     * 根据钉钉编号，查询近二十天，关联的表单信息
     *
     * @param empAndDeptAndDingdingAttendParam
     * @author wjk
     * @Date 2022-03-18
     */
    List<DingdingEmpSimpleResult> queryRequestDetailByBh(EmpAndDeptAndDingdingAttendParam empAndDeptAndDingdingAttendParam);

    /**
     * 删除钉钉人员数据，根据人员在部门钉钉里面的编号
     * 并且将人员标记为离职状态
     * 将该人员的打卡记录标记为不打卡
     *
     * @author wjk
     * @Date 2022-03-16
     */
    Map deleteDingdingEmpByBhList(List<String> list);

    /**
     * 批量插入
     *
     * @author zxd
     * @Date 2022-03-10
     */
    void batchInsert(List list);



    List<Dept> queryDepts(Pid pid);

    LayuiPageInfo findPageYyjl(BtyPerformanceMonthInformationParam btyPerformanceMonthInformationParam);

    LayuiPageInfo findPageDd(AttendAuditBtyAreaParam param);

    LayuiPageInfo findPageDm(AttendAuditBtyAreaParam param);

    LayuiPageInfo findPageXm();

    /**
     *  导出excel表格
     *  获取钉钉人员，部门，打卡，关联关系表
     *  根据大级别的部门，获取小级别的部门，并且将小部门分组；
     * @author wjk
     * @Date 2021-03-22
     */
    ResponseEntity<byte[]> exportEmpAndDeptArrayList(HttpServletRequest request, HttpServletResponse response, EmpAndDeptAndDingdingAttendParam empAndDeptAndDingdingAttendParam);
}
